home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Viewer How-To CD / Microsoft Multimedia Viewer How-To CD.iso / mvsample / progsamp / eplist / parse.c < prev    next >
C/C++ Source or Header  |  1993-03-21  |  3KB  |  146 lines

  1. #include <windows.h>
  2. #include <ctype.h>
  3. #include <stdlib.h>
  4. #include <viewer.h>
  5.  
  6. #include "eplist.h"
  7. #include "parse.h"
  8.  
  9. LPSTR EatWhite(LPSTR lpsz)
  10. {
  11.     while(*lpsz && *lpsz == ' ')
  12.         lpsz++;
  13.     return lpsz;
  14. }
  15.     
  16.  
  17. LPSTR MakeInt(LPSTR lpsz, LPINT lpi)
  18. {
  19.     BOOL bNeg = FALSE;
  20.  
  21.     if(*lpsz == '-')
  22.     {
  23.         bNeg = TRUE;
  24.         lpsz++;
  25.     }
  26.  
  27.     for(*lpi = 0; isdigit(*lpsz); lpsz++)
  28.         *lpi = *lpi * 10 + (*lpsz - '0');
  29.  
  30.     if(bNeg)
  31.         *lpi *= -1;
  32.  
  33.     return lpsz;
  34. }
  35.  
  36.  
  37. LPSTR MakeWord(LPSTR lpsz, LPSTR lpszWord)
  38. {
  39.     char chTerm;
  40.     
  41.     if(*lpsz == '"')
  42.     {
  43.         chTerm = '"';
  44.         lpsz++;
  45.     }
  46.     else
  47.     {
  48.         chTerm = ' ';
  49.     }
  50.  
  51.     while(*lpsz && *lpsz != chTerm)
  52.     {
  53.         *lpszWord++ = *lpsz++;
  54.     }
  55.     *lpszWord = 0;
  56.  
  57.     if(chTerm == '"' && *lpsz)
  58.         return ++lpsz;
  59.     else
  60.         return lpsz;
  61. }
  62.  
  63.  
  64. /*************************************************************************
  65.  * CopyFilename: Copies an MVB filename string and converts backslashes
  66.  *               to forward slashes. This makes the filename compatible
  67.  *               with Viewer commands.
  68.  *
  69.  *************************************************************************/
  70.  
  71. void CopyFilename(
  72.     LPSTR lpszDest, 
  73.     LPSTR lpszSrc)
  74. {
  75.     int i, j;
  76.  
  77.     for(i = 0, j = 0; lpszSrc[i]; i++)
  78.     {
  79.         switch(lpszSrc[i])
  80.         {
  81.             case ' ':
  82.                 break;
  83.  
  84.             case '\\':
  85.                 lpszDest[j++] = '/';
  86.                 break;
  87.  
  88.             default:
  89.                 lpszDest[j++] = lpszSrc[i];
  90.                 break;
  91.         }
  92.     }
  93.     lpszDest[j] = 0;
  94. }
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103. int ParseAuthorString(LPLISTINFO lpLI, LPSTR lpszAuthor)
  104. {
  105.     // Parse author-data string and record pane settings
  106.  
  107.     lstrcpy(lpLI->szAuthorData, lpszAuthor);
  108.  
  109.     lpszAuthor = MakeWord(EatWhite(lpszAuthor), lpLI->szListFilename);
  110.  
  111.     while(*lpszAuthor)
  112.     {
  113.         lpszAuthor = EatWhite(lpszAuthor);
  114.  
  115.         if(*lpszAuthor == '/')
  116.             lpszAuthor++;
  117.         else
  118.             break;
  119.  
  120.         switch(*lpszAuthor)
  121.         {
  122.         case 'W': case 'w':
  123.             lpszAuthor = MakeInt(++lpszAuthor, &lpLI->iWidth);
  124.             break;
  125.  
  126.         case 'H': case 'h':
  127. //            lpszAuthor = MakeInt(++lpszAuthor, &lpLI->iLines);
  128.             lpszAuthor = MakeInt(++lpszAuthor, &lpLI->iHeight);
  129.  
  130.             break;
  131.  
  132.         case 'f': case 'F':
  133.             lpszAuthor = MakeWord(++lpszAuthor, lpLI->szFont);
  134.             break;
  135.  
  136.         case 's': case 'S':
  137.             lpszAuthor = MakeInt(++lpszAuthor, &lpLI->iFontSize);
  138.             break;
  139.  
  140.         default:
  141.             return LISTERR_SYNTAX;
  142.         }
  143.     }
  144.     return 0;
  145. }
  146.